Skill

Java Technologies উদাহরণ সহ Transformation এবং Animation গাইড ও নোট

335

JOGL (Java OpenGL) ব্যবহার করে আপনি গ্রাফিক্সের transformation (স্থানাঙ্ক পরিবর্তন) এবং animation (এনিমেশন) তৈরি করতে পারেন। OpenGL এর মাধ্যমে Translation, Rotation, Scaling, এবং Animation করতে পারেন, যা গ্রাফিক্সের অবস্থান পরিবর্তন বা মুভমেন্ট তৈরিতে সহায়ক। JOGL ব্যবহার করে 3D গ্রাফিক্সের জন্য সিম্পল transformation এবং animation উদাহরণ দেখাবো।


Transformation (Translation, Rotation, Scaling)


Transformation এর মাধ্যমে 2D বা 3D অবজেক্টের স্থানাঙ্ক পরিবর্তন করা হয়। এর মধ্যে প্রধান তিনটি transformation হল:

  1. Translation: এটি অবজেক্টের অবস্থান পরিবর্তন করে (x, y, z).
  2. Rotation: এটি অবজেক্টকে নির্দিষ্ট কোণে ঘোরায়।
  3. Scaling: এটি অবজেক্টের আকার পরিবর্তন করে।

JOGL Transformation উদাহরণ

এখানে, আমরা JOGL ব্যবহার করে একটি কিউবকে translation, rotation, এবং scaling দিয়ে এনিমেটেড করবো।

JOGL Transformation উদাহরণ:

import com.jogamp.opengl.*;
import com.jogamp.opengl.awt.GLCanvas;
import javax.swing.*;
import com.jogamp.opengl.util.FPSAnimator;

public class JOGLTransformation implements GLEventListener {

    private float angle = 0.0f;
    private float scale = 1.0f;

    @Override
    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set background color
        gl.glEnable(GL.GL_DEPTH_TEST);  // Enable depth testing for 3D rendering
    }

    @Override
    public void dispose(GLAutoDrawable drawable) {
        // Cleanup resources if needed
    }

    @Override
    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // Clear the screen

        gl.glLoadIdentity();  // Reset transformations

        // Move the object back a little
        gl.glTranslatef(0.0f, 0.0f, -6.0f);

        // Apply rotation
        gl.glRotatef(angle, 1.0f, 0.0f, 0.0f);  // Rotate around the X axis
        gl.glRotatef(angle, 0.0f, 1.0f, 0.0f);  // Rotate around the Y axis

        // Apply scaling
        gl.glScalef(scale, scale, scale);  // Apply scaling

        // Draw a Cube (4 vertices per face)
        gl.glBegin(GL2.GL_QUADS);  // Begin drawing quads

        // Front face
        gl.glColor3f(1.0f, 0.0f, 0.0f);  // Red color
        gl.glVertex3f(-1.0f, -1.0f,  1.0f);
        gl.glVertex3f( 1.0f, -1.0f,  1.0f);
        gl.glVertex3f( 1.0f,  1.0f,  1.0f);
        gl.glVertex3f(-1.0f,  1.0f,  1.0f);

        // Other faces...
        gl.glEnd();  // End drawing

        angle += 1.0f;  // Increase angle for next frame
        if (angle > 360) {
            angle = 0.0f;
        }

        scale = (float) (1 + Math.sin(angle * Math.PI / 180) * 0.5);  // Scale changes with angle
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL gl = drawable.getGL();
        gl.glViewport(0, 0, width, height);  // Adjust the viewport size
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(45.0f, (float) width / height, 0.1f, 100.0f);  // Set perspective projection
        gl.glMatrixMode(GL.GL_MODELVIEW);  // Return to model-view matrix
    }

    public static void main(String[] args) {
        GLCanvas canvas = new GLCanvas();
        canvas.addGLEventListener(new JOGLTransformation());
        canvas.setSize(800, 600);

        JFrame frame = new JFrame("JOGL Transformation Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(canvas);
        frame.setSize(800, 600);
        frame.setVisible(true);

        FPSAnimator animator = new FPSAnimator(canvas, 60);
        animator.start();  // Start the animation loop
    }
}

ব্যাখ্যা:

  1. Translation: কিউবটি glTranslatef(0.0f, 0.0f, -6.0f) দিয়ে Z অক্ষ বরাবর সরানো হয়েছে, যাতে এটি ক্যামেরার সামনে দেখা যায়।
  2. Rotation: কিউবটি প্রতি ফ্রেমে 1 ডিগ্রি করে ঘোরানো হচ্ছে, যা glRotatef(angle, 1.0f, 0.0f, 0.0f) এবং glRotatef(angle, 0.0f, 1.0f, 0.0f) এর মাধ্যমে করা হচ্ছে।
  3. Scaling: কিউবটির আকার পরিবর্তন হচ্ছে, যা glScalef(scale, scale, scale) দিয়ে করা হচ্ছে। আকার পরিবর্তনটি Math.sin(angle) ব্যবহার করে করা হয়েছে।

FPSAnimator:

  • FPSAnimator ব্যবহার করা হয়েছে যাতে প্রতি সেকেন্ডে 60 ফ্রেম রেন্ডার হয় এবং এনিমেশন smooth থাকে।

Animation (এনিমেশন)

JOGL এ animation তৈরি করতে আপনাকে time-based transformation ব্যবহার করতে হবে। উপরের উদাহরণে, angle এবং scale ভেরিয়েবল সময়ের সাথে পরিবর্তিত হচ্ছে, যা কিউবের ঘূর্ণন এবং আকারের পরিবর্তন দেখাচ্ছে।

এনিমেশনকে time-based করার জন্য, আপনি OpenGL transformations যেমন translation, rotation, এবং scaling ব্যবহার করতে পারেন, যা অবজেক্টের অবস্থান বা গতি পরিবর্তন করে।


JOGL দিয়ে Animation এর অন্যান্য উদাহরণ

আপনি Animation এর মধ্যে বিভিন্ন কৌশল ব্যবহার করতে পারেন:

  • Object Movement: কিউব বা অন্যান্য শেপের গতি পরিবর্তন (ইউজার ইনপুটের মাধ্যমে বা সময় ভিত্তিক)।
  • Object Rotation: একটি অবজেক্ট বা শেপকে একটি নির্দিষ্ট অক্ষ বরাবর ঘোরানো।
  • Camera Movements: ক্যামেরার অবস্থান পরিবর্তন করা।

অন্যান্য Animation Example (Object Movement)

@Override
public void display(GLAutoDrawable drawable) {
    GL gl = drawable.getGL();
    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

    gl.glLoadIdentity();  // Reset transformations
    gl.glTranslatef(0.0f, 0.0f, -6.0f); // Move the object back

    // Moving object on the X axis
    float xMovement = (float) Math.sin(System.currentTimeMillis() / 1000.0) * 2.0f;

    // Draw a rotating cube
    gl.glTranslatef(xMovement, 0.0f, 0.0f);  // Animate on the X-axis

    // Drawing the cube
    gl.glColor3f(0.0f, 0.0f, 1.0f);  // Blue color
    gl.glBegin(GL2.GL_QUADS);
    // Front face vertices...
    gl.glEnd();
}

এখানে xMovement পরিবর্তন হচ্ছে সময়ের সাথে (জানি System.currentTimeMillis()), যার মাধ্যমে কিউবটি অনুভূমিকভাবে সরতে থাকে।


সারাংশ


JOGL এর মাধ্যমে Transformation (Translation, Rotation, Scaling) এবং Animation তৈরি করা Java অ্যাপ্লিকেশনগুলিতে 3D গ্রাফিক্সের সাথে interactive এবং dynamic উপাদান যোগ করতে সহায়তা করে। আপনি অবজেক্টের অবস্থান, আকার এবং ঘূর্ণন পরিবর্তন করতে পারেবেন এবং সেগুলিকে FPSAnimator ব্যবহার করে স্মুথ এনিমেশন দিতে পারবেন। এই টেকনিকগুলি game development, simulation, এবং interactive graphics এ খুবই উপকারী।

Content added By
Promotion

Are you sure to start over?

Loading...